package com.drg.center.service;

import com.drg.center.entity.param.DoctorGroupSummaryDTO;
import com.drg.center.entity.param.DoctorSummaryDTO;
import com.drg.center.entity.result.*;

import java.time.LocalDate;
import java.util.List;

/**
 * @Author: zhangxilin
 * @Date: 2025/1/6
 */
public interface StatisticsDoctorFromEsService {

    /**
     * 医生组盈亏汇总(DSL-100)
     *
     * @param param
     * @return
     */
    List<DoctorGoupSummaryVO> getDoctorGoupSummaryVO(DoctorGroupSummaryDTO param);


    /**
     * 医生组盈亏情况(DSL-101)
     *
     * @param startDate
     * @param endDate
     * @return
     */
    List<KeyValueVO> getDoctorGroupProfitStt(LocalDate startDate, LocalDate endDate);

    /**
     * 医生组盈亏占比(DSL-102)
     *
     * @param startDate
     * @param endDate
     * @return
     */
    ProfitLossMixVO getDoctorGroupProfitRateStt(LocalDate startDate, LocalDate endDate);

    /**
     * 医生组盈亏总趋势(DSL-103)
     *
     * @param year
     * @return
     */
    ChartLineVO getDoctorGroupProfitTrendVO(Integer year);

    /**
     * 医生盈亏汇总(DSL-104)
     *
     * @param param
     * @return
     */
    List<DoctorSummaryVO> getDoctorSummaryVO(DoctorSummaryDTO param);

    /**
     * 医生盈亏占比(DSL-105)
     *
     * @param startDate
     * @param endDate
     * @return
     */
    ProfitLossMixVO getDoctorProfitRateStt(LocalDate startDate, LocalDate endDate);

    /**
     * 医生盈利排名TOP5(DSL-106)
     *
     * @param startDate
     * @param endDate
     * @return
     */
    List<KeyValueVO> getDoctorProfitTop5(LocalDate startDate, LocalDate endDate);

    /**
     * 医生亏损排名TOP5(DSL-107)
     *
     * @param startDate
     * @param endDate
     * @return
     */
    List<KeyValueVO> getDoctorLossTop5(LocalDate startDate, LocalDate endDate);

    /**
     * 医生盈亏总趋势(DSL-108)
     *
     * @param year
     * @param doctorCodeList
     * @return
     */
    ChartLineVO getDoctorCostTrend(Integer year, List<String> doctorCodeList);

    /**
     * 病组疑难病例分布图-rw分布(DSL-019)
     *
     * @param searchDrgCodeList
     * @param startDate
     * @param endDate
     * @return
     */
    DifficultCaseDistributeVO getDifficultCaseDistribute(List<String> searchDrgCodeList, LocalDate startDate, LocalDate endDate);

    /**
     * 病组盈亏分析(DSL-110)
     *
     * @param year
     * @param drgCodeList
     * @return
     */
    ChartLineVO getDrgProfitTrend(Integer year, List<String> drgCodeList);

    /**
     * 病组例均费用分布(DSL-111)
     *
     * @param year
     * @param drgCodeList
     * @return
     */
    ChartLineVO getDrgAvgCostTrend(Integer year, List<String> drgCodeList);

    /**
     * 病组盈亏项目统计--本条产品设计逻辑混乱-应付演示(DSL-112)
     *
     * @param searchDepartCode
     * @param searchDrgCode
     * @param startDate
     * @param endDate
     */
    List<DrgProfitLossProjectTotalPageVO> getDrgProjectStt(String searchDepartCode, String searchDrgCode, LocalDate startDate, LocalDate endDate);

    /**
     * 病例复杂程度分析(DSL-113)
     *
     * @param searchDepartCode
     * @param startDate
     * @param endDate
     */
    List<CaseComplexityAnalysisPageVO> getComplexity(String searchDepartCode, LocalDate startDate, LocalDate endDate);

    /**
     * 住院费用箱式分析(DSL-114)
     *
     * @param year
     * @return
     */
    ChartLineVO getCostBoxData(Integer year);


    /**
     * 医保标杆值分析(DSL-115)
     *
     * @param searchDrgCode
     * @param startDate
     * @param endDate
     */
    List<MedicareBenchmarkingAnalysisPageVO> benchmarkStt(String searchDrgCode, LocalDate startDate, LocalDate endDate);


    /**
     * 患者结构分析(DSL-116)
     *
     * @param startDate
     * @param endDate
     * @param startAge
     * @param endAge
     * @param insuranceType
     */
    PatientStructuralAnalysisEsVO structuralStt(LocalDate startDate, LocalDate endDate, Integer startAge, Integer endAge, String insuranceType);

    /**
     * 基金预算使用分析(DSL-117)
     *
     * @param year
     * @param departCodeList
     * @return
     */
    ChartLineVO getExpireFundCostTrend(Integer year, List<String> departCodeList);

    /**
     * 综合分析总(DSL-118)
     *
     * @param searchDepartCode
     * @param startDate
     * @param endDate
     */
    List<ComprehensiveAnalysisPageVO> comprehensiveStt(String searchDepartCode, LocalDate startDate, LocalDate endDate);

    /**
     * 超额排名分析(DSL-119)
     *
     * @param startDate
     * @param endDate
     */
    List<OverRankingAnalysisPageVO> overRankStt(LocalDate startDate, LocalDate endDate);

    /**
     * DRG结算统计(DSL-120)
     * @param startDate
     * @param endDate
     * @return
     */
    List<DrgSettleVO> getDrgSettleStt(LocalDate startDate, LocalDate endDate);
}
